// 定义Schema (骨架) > 创建model（模型）> Entity实例化方法
// model 表模型

const mongoose = require("mongoose");

const Schema = mongoose.Schema; // 表结构
const model = mongoose.model; // 表模型

// model 表结构模型  (MongoDB 通过表结构模型来操作数据库 )

// 操作数据库的里面的表

// Schema (定义表结构)
// Schema主要用于定义MongoDB中集合Collection里文档document的结构,
// 理解为mongoose对表结构的定义   (不仅仅可以定义文档的结构和属性，还可以定义文档的实例方法、静态模型方法、复合索引等)
// 每个schema会映射到mongodb中的一个collection，schema不具备操作数据库的能力
// 定义Schema非常简单，指定字段名和类型即可，支持的类型包括以下8种

// String      字符串
// Number      数字
// Date        日期
// Buffer      二进制
// Boolean     布尔值
// Mixed       混合类型
// ObjectId    对象ID
// Array       数组

const UserSchema = new Schema({
  username:String,
  age:Number,
  password:String,
  address:String,
  birth:Date, 
  isChild:Boolean,
  phone:String,  
  avatar:String, 
  email:String,
  role:Number,
  time:Date ,
})

const IdSchema = new Schema({
  id: Number,
});

const MovieSchema = new Schema({
  genres: Array,
  casts: Array,
  directors: Array,
  rating: Object,
  title: String,
  collect_count: Number,
  original_title: String,
  subtype: String,
  year: String,
  images: Object,
  alt: String,
  id: String,
});

const RoleSchema = new Schema({
  id: Number,
  value: Number,
  label: String,
  color: String,
});
// 公告表
const AnnoSchema = new Schema({
  title: String,
  context: String,
  cate: String,
  author: Object,
  time: Date,
});
// 意见表
const AdviseSchema = new Schema({
  title: String,
  context: String,
  cate: String,
  author: Object,
  time: Date,
});
// 核酸表
const NucSchema = new Schema({
  res: String, //结果，阴性阳性
  author: Object, //接种人
  date: Date, //做核酸的日期
});
// 疫苗表
const VacSchema = new Schema({
  brand: String, //疫苗品牌
  hospital: String, //接种医院
  author: Object, //接种人
  date: Date, //接种日期
});
// 出行表
const TraSchema = new Schema({
  // 想搞可以搞个出行人，加关系。因为表结构没有这个数据导致数据没有传进来
  address: String, //目的地
  author: Object, //出行人
  dates: Array, //出行日期。是一个数组，包括出发的日期和回来的日期
});
// 商品表
const GoodsSchema = new Schema({
  // 只要你不增删改，只查，GoodsSchema内部写个空的也是可以的
});

// 购物车表
const CartSchema = new Schema({
  good: Object, //商品详情
  buyer: Object, //购买人
  value: Number, //购买数量
  checked: Boolean, //是否选中
});
// 订单表
const BillSchema = new Schema({
  good: Object, //商品详情
  buyer: Object, //购买人
  value: Number, //购买数量
  status: String, //商品状态：未付款、已付款、未发货、未评价之类
});
// 留言板
const CommentSchema = new Schema( {
  "id":String,
  "title": String,
  "content": String,
})
// react项目
const QFUserSchema = new Schema({
  username:String,
  age:Number,
  password:String,
  address:String,
  birth:Date, 
  isChild:Boolean,
  phone:String,  
  avatar:String, 
  email:String,
  role:Number,
  time:Date ,
})

const QFTimuSchema = new Schema( {
  answer: String,
  desc: String,
  diffs: Number,
  hasAnswer: Boolean,
  title: String,
  type: String,
  score:Number,  //  1分 设置答案 5分  每次查看 1  点赞收藏2分 评论3分 
  time:Date,
  author:Object, 
  likes:Number,
  loves:Number,
  pings:Number
})

const QFRoleSchema = new Schema( {
  label: String,
  value: Number,
  color: String,
})

const QFAnnoSchema = new Schema({
  title: String,
  type: String,
  content: String,
  author:Object,
})

// Model   数据模型
// Model是由Schema编译而成的假想（fancy）构造器，具有抽象属性和行为
// Model的每一个实例（instance）就是一个document  document可以保存到数据库和对数据库进行操作
// model是由schema生成的模型，可以对数据库的操作
// mongoose.model(`表名`, Schema)

// 如果表名称的最后一个字符是字母 会变成复数  user = users   city = cities  yyoh => yyohes
// 如果表名称的最后一个字符是数字，则不变  user1  = user1
// exports.user_Model =  mongoose.model('user',user_schema)     user =>  users
// exports.user_Model =  mongoose.model('user1',user_schema)       user1 =>  user1
// exports.user_Model =  mongoose.model('movie',user_schema)    movie => movies
// exports.user_Model =  mongoose.model('city',user_schema)    city => cities

exports.UserModel = model("users", UserSchema);
exports.IdModel = model("ids", IdSchema);
exports.MovieModel = model("movies", MovieSchema); // moive => movies
exports.RoleModel = model("roles", RoleSchema);

exports.AnnoModel = model("annos", AnnoSchema); //这个表模型没写导致的报错
exports.AdviseModel = model("advises", AdviseSchema);
//表模型，表名，表结构。
// 要对这三张表进行新增，查询，删除
exports.TraModel = model("tras", TraSchema); //出行
exports.VacModel = model("vacs", VacSchema); //疫苗
exports.NucModel = model("nucs", NucSchema); //核酸
exports.GoodsModel = model("goods", GoodsSchema); //商品
exports.CartModel = model("carts", CartSchema); //购物车
exports.BillModel = model("bills", BillSchema); //订单
exports.CommentModel = model('comments',CommentSchema)//留言表
//千锋后台管理系统
exports.QFUserModel = model('qfusers',QFUserSchema)//用户
exports.QFTimuModel = model('qftimus',QFTimuSchema)//题目
exports.QFRoleModel = model('qfroles',QFRoleSchema)//角色
exports.QFAnnoModel = model('qfannoes',QFAnnoSchema)//公告